package com.haiheng.voiceandbook

class User private constructor() {
    companion object {
        /**
         * 方式一
         */
        val user by lazy { User() }

        /**
         * SYNCHRONIZED
         * 默认的，多个线程访问，只有一个线程去初始化lazy对象
         *
         *
         * PUBLICATION
         *
         * 如果对象还没初始化，可以有多个线程去调用，如果初始化完成，其他线程使用初始化完成的值
         *
         *
         * NONE
         * 单线程使用，不会有并发问题
         *
         */
        /**
         * 方式2
         */
        val user1 by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){User}
        /**
         * by lazy 声明的变量只能用 val，因为初始化完成之后它的值是不会变的。
         */
    }

}